package com.soup.lab.third.token;

/**
 * Token获取器
 * 每个厂商实现一个
 */
public interface TokenFetcher {

    /**
     * 通过参数获取token
     *
     * @param tokenConfig   token配置
     * @param forceUpdate   强制更新token，即使它还没有过期
     * @return 返回获取到的token，失败返回null
     */
    Token fetchToken(TokenConfig tokenConfig, boolean forceUpdate);

    default Token fetchToken(TokenConfig tokenConfig) {
        return fetchToken(tokenConfig, false);
    }

    /**
     * 获取token，并将它与配置打包返回
     *
     * @param tokenConfig
     * @return 返回值不应该为空
     */
    default TokenPack packToken(TokenConfig tokenConfig) {
        return packToken(tokenConfig, false);
    }

    default TokenPack packToken(TokenConfig tokenConfig, boolean forceUpdate) {
        return new TokenPack(fetchToken(tokenConfig, forceUpdate), tokenConfig);
    }

}
